package com.jiangyao.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jiangyao.model.dto.*;
import com.jiangyao.model.dto.backend.SubjectChapterDTO;
import com.jiangyao.model.dto.backend.SubjectChapterDelDTO;
import com.jiangyao.model.dto.backend.SubjectDTO;
import com.jiangyao.model.dto.backend.SubjectListPageDTO;
import com.jiangyao.model.entity.Category;
import com.jiangyao.model.entity.Subject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiangyao.model.vo.*;
import com.jiangyao.model.vo.backend.SubjectChapterVO;
import com.jiangyao.model.vo.backend.SubjectDetailVO;
import com.jiangyao.model.vo.backend.SubjectListVO;

import java.util.List;


/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author lijing
 * @since 2020-08-12
 */
public interface SubjectService extends IService<Subject> {

	/**
	 * 获取学习的课程介绍
	 * @param subjectDto
	 * @return
	 */

	SubjectVo getSubjectInfo(SubjectDto subjectDto);

    /**
     * 获取学习的课程章节目录情况
     * @param subjectDto
     * @return
     */
    SChapterVo getDirectoryInfo(SubjectDto subjectDto);

	/**
	 * 获取学习的课程试题列表
	 * @param subjectDto
	 * @return
	 */
	ChapterQuestionVo getQuestionsList(SubjectDto subjectDto);

	/**
	 * 获取学习当前点击的课件信息
	 * @param coursewareDTO
	 * @return
	 */
	ChapterCoursewareVo getCoursewareInfo(CoursewareDTO coursewareDTO);

    /**
     * 课件学习页面下方的课件列表
     * @param coursewareDTO
     * @return
     */
	SChapterCoursewareVo getCoursewareList(CoursewareDTO coursewareDTO);

	/**
	 * 课程评价列表
	 * @param subjectListPageDto
	 * @return
	 */
	Page<EvaluationVo> getCommentList(SubjectListPageDto subjectListPageDto);

	/**
	 * 获取课程列表
	 *
	 * @param listPageDTO 列表DTO
	 * @return 结果
	 */
	Page<SubjectListVO> getListPage(SubjectListPageDTO listPageDTO);

	/**
	 * 增加课程
	 *
	 * @param subjectDTO 增加DTO
	 */
	void add(SubjectDTO subjectDTO);

	/**
	 * 编辑课程
	 *
	 * @param subjectDTO 编辑DTO
	 */
	void edit(SubjectDTO subjectDTO);

	/**
	 * 编辑课程状态（启用、禁用）
	 *
	 * @param subjectDTO 编辑DTO
	 */
	void editStatus(SubjectDTO subjectDTO);

	/**
	 * 获取课程详情
	 *
	 * @param subjectDTO 请求DTO
	 * @return 结果
	 */
	SubjectDetailVO getDetail(SubjectDTO subjectDTO);


	/**
	 * 获取课程章节列表
	 *
	 * @param subjectDTO 请求DTO
	 * @return 结果
	 */
	SubjectChapterVO getChapterList(SubjectDTO subjectDTO);

	/**
	 * 编辑课程章节
	 *
	 * @param subjectChapterDTO 课程章节DTO
	 */
	void updateChapter(SubjectChapterDTO subjectChapterDTO);

	/**
	 * 删除课程章节、章节课件
	 *
	 * @param delDTO 删除课程章节DTO
	 */
	void deleteChapter(SubjectChapterDelDTO delDTO);


	/**
	 * 保存用户学习课件详情
	 */
	Boolean saveCourseware(StudyCoursewareDto studyCoursewareDto);

	/**
	 * 保存评论
	 * @param evaluationDto
	 * @return
	 */
	Boolean saveComment(EvaluationDto evaluationDto);

	/**
	 * 保存回复
	 * @param evaluationDto
	 * @return
	 */
	Boolean saveReply(EvaluationDto evaluationDto);

	/**
	 * 查询是否点赞
	 */
	Boolean getLike(SubjectDto subjectDto);
	/**
	 * 修改公开课状态
	 * @param subjectDTO
	 */
    void editPublicStatus(SubjectDTO subjectDTO);

	/**
	 * 修改精选状态
	 * @param subjectDTO
	 */
	void editChoiceness(SubjectDTO subjectDTO);

	//公开课相关-获取公开课分类
    List<Category> getPublicCategory();
	//公开课相关-获取精选课程列表
	Page<PublicSubjectListVo> getPublicChoiceness(PublicSubjectDto dto);
	//公开课相关-获取新上好课列表
	Page<PublicSubjectListVo> getPublicNewest(PublicSubjectDto dto);
}
